'use strict';
var vk; // 全局vk实例
// 涉及的表名
//var dbName = "mbxh-nrgl", // 测试表
const dbName = "mbxh-nrgl";

const dbNamee = {
	mbxhnrgl: "mbxh-nrgl", // 测试表
};

var db = uniCloud.database(); // 全局数据库引用
var _ = db.command; // 数据库操作符
var $ = _.aggregate; // 聚合查询操作符
/**
 * 权限注意：访问以下链接查看
 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#内置权限
 */
var cloudObject = {
	isCloudObject: true, // 标记为云对象模式
	/**
	 * 请求前处理，主要用于调用方法之前进行预处理，一般用于拦截器、统一的身份验证、参数校验、定义全局对象等。
	 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#before-预处理
	 */
	_before: async function() {
		vk = this.vk; // 将vk定义为全局对象
		// let { customUtil, uniID, config, pubFun } = this.getUtil(); // 获取工具包
		const redis = await vk.redis();
		 let methodName = this.getMethodName();
		if(methodName.indexOf("delete") !== 0 || methodName.indexOf("update") !== 0 || methodName.indexOf("add") !== 0){
			let { nrtype,_id } = this.getParams();
				//清除首页缓存
				 await redis.del('mbxh-nrgl:index');
				 await redis.del('mbxh-nrgl-getNewsTjcxList:index');
				 await redis.del('mbxh-nrgl-getNewsListPlusApp:index');
				 //--移动端缓存
					await redis.del('getNewsListAllPuls:djgz');
					await redis.del('getNewsListAllPuls:djgz2');
					await redis.del('getNewsListAllPuls:mxrw');
					await redis.del('getNewsListAllPuls:xwzx');
					await redis.del('getNewsListAllPuls:xhwj2');
					await redis.del('getNewsListAllPuls:xhgk');
					await redis.del('getNewsListAllPuls:djgztzgg');
					await redis.del('getNewsListAllPuls:xwzx2');
					await redis.del('getNewsListAllPuls:xhhd');
					await redis.del('getNewsListAllPuls:zcfg');
				 //--
				 if (vk.pubfn.isNull(_id)) {
				 	//return { code : -1, msg : `店铺id不能为空` };
				 }else{
					  await redis.del('mbxh-nrgl-getNewsById:'+_id);
				 }
			  if (vk.pubfn.isNull(nrtype)) {
				//return { code : -1, msg : `店铺id不能为空` };
			  }else{
				  //清除 选项缓存
				  await redis.del('mbxh-nrgl-getNewsListAll:'+nrtype);
			  }
		}
	},
	/**
	 * 请求后处理，主要用于处理本次调用方法的返回结果或者抛出的错误
	 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#after-后处理
	 */
	_after: async function(options) {
		let { err, res } = options;
		if (err) {
			return; // 如果方法抛出错误，直接return;不处理
		}
		return res;
	},
	/**
	 * 批量审核新媒体任务函数 
	 * @url admin/hymbjyxh/nrgl/kh/nrgl-obj.updateList 前端调用的url参数地址
	 */
	updateList: async function(data) {
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		//let userInfo = await this.getUserInfo(); // 获取当前登录的用户信息s
		//console.log("请求参数", data);
		
		// 业务逻辑开始-----------------------------------------------------------
		let res = { code: 0, msg: '' };
		let {_ids} = data;
		// 参数非空检测
		if (vk.pubfn.isNullOne(_ids)) {
			return { code: -1, msg: '参数错误' };
		}
		
		res.num = await vk.baseDao.update({
		  dbName: dbName, // 表名
		  whereJson: { // 条件
		    _id: _.in(_ids)
		  },
		  dataJson: { // 需要修改的数据
		    radio1: '1'
		  }
		});

		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 批量审核新媒体任务函数 
	 * @url admin/hymbjyxh/nrgl/kh/nrgl-obj.deleteList 前端调用的url参数地址
	 */
	deleteList: async function(data) {
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		//let userInfo = await this.getUserInfo(); // 获取当前登录的用户信息s
		//console.log("请求参数", data);
		
		// 业务逻辑开始-----------------------------------------------------------
		let res = { code: 0, msg: '' };
		let {_ids} = data;
		// 参数非空检测
		if (vk.pubfn.isNullOne(_ids)) {
			return { code: -1, msg: '参数错误' };
		}
	
		//1.批量删除
		// 返回被删除的记录条数
		res.num = await vk.baseDao.del({
		  dbName:dbName,
		  whereJson:{
			_id:_.in(_ids)
		  }
		});
	
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/hymbjyxh/nrgl/kh/nrgl-obj.deleteObjOne 前端调用的url参数地址
	 */
	deleteObjOne: async function(data) {
		let { uid, filterResponse, originalParam } = this.getClientInfo(); // 获取客户端信息
		let res = { code: 0, msg: '' };
		// 业务逻辑开始-----------------------------------------------------------
		const redis = await vk.redis();
		let { _id } = data;
		await redis.del('mbxh-nrgl-getNewsById-incr:'+_id);
		if(vk.pubfn.isNull(_id)){
			return { code : -1, msg : 'id不能为空' };
		}
		res.num = await vk.baseDao.deleteById({
			dbName,
			id:_id
		});
		
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/hymbjyxh/nrgl/kh/nrgl-obj.updateObjOne 前端调用的url参数地址
	 */
	updateObjOne: async function(data) {
		let { uid, filterResponse, originalParam } = this.getClientInfo(); // 获取客户端信息
		let res = { code: 0, msg: '' };
		// 业务逻辑开始-----------------------------------------------------------
		//console.log("请求参数", data);
		let updateId = data._id
		Reflect.deleteProperty(data,'_id')
		// 此处应该还需要判断下mobile和username是否已存在等参数校验逻辑和
		//let register_date = new Date().getTime();
		res.newInfo = await vk.baseDao.updateById({
		  dbName:dbName,
		  id:updateId,
		  dataJson:{
		    ...data
		  }
		});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/hymbjyxh/nrgl/kh/nrgl-obj.addObjOne 前端调用的url参数地址
	 */
	addObjOne: async function(data) {
		let { uid, filterResponse, originalParam } = this.getClientInfo(); // 获取客户端信息
		let res = { code: 0, msg: '' };
		data.xxzt = '1'
		// 业务逻辑开始-----------------------------------------------------------
		if(data._id){
			let updateId = data._id
			Reflect.deleteProperty(data,'_id')
			// 此处应该还需要判断下mobile和username是否已存在等参数校验逻辑和
			//let register_date = new Date().getTime();
			res.newInfo = await vk.baseDao.updateById({
			  dbName:dbName,
			  id:updateId,
			  dataJson:{
			    ...data
			  }
			});
		}else{
			//console.log("请求参数", data);
			res.id = await vk.baseDao.add({
			  dbName:dbName,// 表名
			  dataJson:{ // 需要新增的数据 json格式
				...data
			  }
			});
		}

		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/hymbjyxh/nrgl/kh/nrgl-obj.getTableList 前端调用的url参数地址 
	 */
	getTableList: async function(data) {
		//let { uid, filterResponse, originalParam } = this.getClientInfo(); // 获取客户端信息
		let res = { code: 0, msg: '' };
		// 业务逻辑开始-----------------------------------------------------------
		res.dbNamee = dbNamee.mbxhnrgl
		//console.log("请求参数", data);
		res = await vk.baseDao.getTableData({
		  dbName,
		  data
		});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
};

module.exports = cloudObject;
